#include<bits/stdc++.h>
#define int long long 
using namespace std;

const int maxn=1e5 +10;
int arr[maxn];
int n;
int ans;

// 主要就是判断每一位是否对于这个区间进行贡献
// 任何区间异或的结果, 就是由每一个二进制位组成
// 我们只用判断每个二进制位对于这个区间是否产生贡献
// 所以 遍历 20 个二进制位
// 如何遍历每个区间呢
// 遍历数组, i 表示以 i 位置作为 区间右端点的所有区间
// 那我们如何知道这一位 对于哪些区间有贡献呢
// 对于所有该 二进制位 有奇数个 1 的都有贡献
// 那我们岂不是需要记录x~i每个区间上的 1 的个数
// 不是,我们只需要记录 1~i这个区间中有几个前缀有 奇数个 1 , 有几个前缀有偶数个 1
// 当到达 i 这个位置时 如果前缀有偶数个 1, 那么就会对所有-奇数个1前缀的区间有贡献, 总的贡献就是  2^i *  奇数的个数
// 反之如果到达 i 有 奇数个 1 时, 会对所有-前缀有偶数个1 的 区间有贡献, 再 + [1,i] 这个区间本身  总的贡献就是 2^i * (偶数的个数+1)
void solve(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>arr[i];
	}
	int ans=0;
	for(int i=0;i<=19;i++){ // 每一位
		int cnt=0; // 这个位置上 为 1 的个数
		int a1=0; // 奇数的个数
		int a0=1; // 偶数的个数
		for(int j=1;j<=n;j++){
			if((arr[j]>>i)&1){ // 这一位为 1 那么就会对以这个值为右端点的区间贡献
				cnt++;
			}	
			if(cnt&1){ // 奇数
				a1++;
				ans+=(1<<i)*a0;
			} else { // 偶数
				ans+=(1<<i)*a1;
				a0++;
			}
		}
		
	}
	cout<<ans<<'\n';
}


signed main(){
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	solve();
	return 0;
}
